package com.yc.sole.erp.response;

import com.yc.sole.erp.enums.OrderState;
import com.yc.sole.erp.enums.PaymentState;
import com.yc.sole.erp.enums.PriorityType;
import com.yc.sole.erp.enums.ShipmentState;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * Resp对象
 *
 * @author yizuomin
 * @date 2023-12-15
 **/
@Data
public class SaleOrderResp implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    private Long id;
    /**
     * 订单编号
     */
    private String orderNo;
    /**
     * 客户id
     */
    private Long customerId;
    /**
     * 客户名称
     */
    private String customerName;
    /**
     * 税率
     */
    private BigDecimal taxRate;
    /**
     * 总数量
     */
    private Integer quantity;
    /**
     * 单位
     */
    private String unit;
    /**
     * 备注
     */
    private String remark;
    /**
     * 订单状态
     */
    private OrderState orderState;
    /**
     * 优先级 0普通 1加急
     */
    private PriorityType priority;
    /**
     * 订单日期
     */
    private String orderDate;
    /**
     * 产品id
     */
    private Long productId;
    /**
     * 产品名称
     */
    private String productName;
    /**
     * 含税单价
     */
    private BigDecimal unitPrice;
    /**
     * 不含税单价
     */
    private BigDecimal unTaxPrice;
    /**
     * 含税总价
     */
    private BigDecimal amount;
    /**
     * 不含税总价
     */
    private BigDecimal unTaxAmount;
    /**
     * 付款状态 0待付款 1部分付款 2已付款
     */
    private PaymentState paymentState;
    /**
     * 已付款金额
     */
    private BigDecimal paidAmount;
    /**
     * 送货数量
     */
    private Integer shippedQuantity;
    /**
     * 送货状态 0未送货 1部分送货 2已送货 3已签收
     */
    private ShipmentState shipmentState;
    /**
     * 产品信息
     */
    private ProductResp productInfo;
    /**
     * 排产信息
     */
    private ProduceResp produceInfo;
    /**
     * 外发信息
     */
    private OsOrderResp outsourcedInfo;

    public BigDecimal getRemainingAmount() {
        return amount.subtract(paidAmount == null ? BigDecimal.ZERO : paidAmount);
    }

    public Integer getRemainingQuantity() {
        return quantity - (shippedQuantity == null ? 0 : shippedQuantity);
    }
}
